#include <cstdio>
#include <cstring>
#include <iostream>
#include <fstream>

using namespace std;

int
main (int argc, char *argv[])
{

	char *filesource, *filetarget;

	filesource = new char[strlen (argv[1]) + 1];

	filetarget = new char[strlen (argv[1]) + 1 + 2];

	memset (filesource, 0, strlen (argv[1]) + 1);

	memset (filetarget, 0, strlen (argv[1]) + 1 + 2);

	strcpy (filesource, argv[1]);

	strcpy (filetarget, filesource);

	strcat (filetarget, ".t");

	fstream ifile;

	fstream ofile;

	ifile.open (filesource, fstream::in);

	ofile.open (filetarget, fstream::out);

	unsigned int line = 0;

	if (ifile.is_open () && ofile.is_open ())	///@alex:注意，文件打开是否成功一定要做检查的
	{

		string tmp;

		while (ifile.good ())	///@alex:用good()会比较好，因为可以不用在于eof还有bad还有fail等等
		{

			getline (ifile, tmp);

			line++;

			size_t p = tmp.find ("=");

			if (p == string::npos)
			{
				cout << "there is no = in the string line " << line << ";"
					<< endl;
			}					///@alex:这边一定要在find之后判断npos的情况才可以
			else
			{

				if ((const int) (tmp[p - 1]) - (const int) (' ') == 0)	//strcmp(&(tmp[p-1])," ")==0 ///@alex:这样写是不行的，因为比较两个str的话，会是tmp从p-1开始一直到底，那么是无法和空格这个单一的
				{

					tmp.erase (p - 1, 1);	///@alex:注意，这边如果是使用数字的话，一定要补全参数，否则默认的erase(p-1)的意思是，从p-1一直到到字符串的末尾，所以加上1之后，意思是从p-1开始的1个字符
				}

				else
				{

					cout <<
						"there is no space before = in the string line " <<
						line << ";" << endl;

				}

				ofile.write (tmp.c_str (), tmp.size ());

				ofile.write ("\n", 1);	///@alex:对于文件换行的结尾情况，直接使用\n这个标志就可代表windows下的cr lf了
				ofile.flush ();

			}

			tmp.clear ();

		}

	}

	else
	{

		cout << "file open failed" << endl;

	}

	ifile.close ();

	ofile.close ();

}

